#include "fldrv_json.h"
#include "flapp_system.h"
///////////////////////////////////////////////////////////////////////////////
extern struct ringbuf rxbuf;

/******************************************************************************
*【说明】：	JSON解码
*		str1:需要解码的字段
*		out :需要输出字符串的地址
******************************************************************************/
void  JSON_Decode(char *source,const char * str1,char * out)
{
	BYTE i = 0;
	char *cp = source;
	char *s1 = NULL;
	char *s2 = NULL;
	
	*out = NULL;
	
	while(*cp)
	{
		s1 = cp;
		s2 = (char *)str1;
		while(*s2 && !(*s1 - *s2))		//*s2不为空，并且*s1要与*s2相等
		{
			s1++;
			s2++;
			if((s1-source) >= rxbuf.mask)
				s1 = rxbuf.datas;
		}
		if(!*s2)
		{
			while(!((*s1 >= '0' && *s1 <='9') || (*s1 >= 'A' && *s1 <= 'Z') || (*s1 >= 'a' && *s1 <='z')))
			{
				s1++;
			if((s1-source) >= rxbuf.mask)
					s1 = rxbuf.datas;
			}
			while((*s1 >= '0' && *s1 <='9') || (*s1 >= 'A' && *s1 <= 'Z') || (*s1 >= 'a' && *s1 <='z') 
				|| (*s1 == ' ') || (*s1 == ':') || (*s1 == '-'))
			{
				*(out+i++) = *s1;
				s1++;
			if((s1-source) >= rxbuf.mask)
					s1 = rxbuf.datas;
			}
			*(out+i) = NULL;
			break;
		}
		cp++;
		if((cp-source)>=rxbuf.mask)
			break;
	}
}

///////////////////////////////////////////////////////////////////////////////
void  JSON_GotoString(char * source,const char * str1,char * out)
{
	BYTE i = 0;
	char *cp = source;
	char *s1 = NULL;
	char *s2 = NULL;
	
	*out = NULL;
	
	while(*cp)
	{
		s1 = cp;
		s2 = (char *)str1;
		while(*s2 && !(*s1 - *s2))		//*s2不为空，并且*s1要与*s2相等
		{
			s1++;
			s2++;
			if((s1-source) >= rxbuf.mask)
				s1 = rxbuf.datas;
		}
		if(!*s2)
		{
			while(*str1 != NULL)
			{
				*(out+i++) = *str1;
				str1++;
			}
			while(*s1 != '\r')
			{
				if((s1-source) >= rxbuf.mask)
					s1 = rxbuf.datas;
				*(out+i++) = *s1;
				s1++;
			}
			*(out+i) = NULL;
			break;
		}
		cp++;
		if((cp-source) >= rxbuf.mask)
			break;
	}
}
